﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
using DBQLTV;

namespace BUS
{
    public class CuonSachBUS
    {
        CuonSachDAO _CuonSachDAO = new CuonSachDAO();

        public string TT_DangMuon;
        public string TT_MuonQuaHan;
        public string TT_TrongTV;

        public CuonSachBUS()
        {
            TT_DangMuon = _CuonSachDAO.TT_DangMuon;
            TT_MuonQuaHan = _CuonSachDAO.TT_MuonQuaHan;
            TT_TrongTV = _CuonSachDAO.TT_TrongTV;
        }

        public bool InsertCuonSach(string TenSach, string NhaXuatBan, int NamXB, int SoLuong)
        {
            SachBUS _SachBUS = new SachBUS();
            if (_SachBUS.GetSach(TenSach, NhaXuatBan, NamXB) != null)
                return _CuonSachDAO.InsertCuonSach(_SachBUS.GetSach(TenSach, NhaXuatBan, NamXB), SoLuong);
            return false;
        }
        public bool DeleteCuonSach(int MaCS)
        {
            return _CuonSachDAO.DeleteCuonSach(MaCS);
        }
        public List<int> GetMaCuonSachVoiTinhTrang(string TenSach, string TinhTrang)
        {
            return _CuonSachDAO.GetMaCuonSachVoiTinhTrang(TenSach, TinhTrang);
        }
        public List<int> GetMaCuonSachVoiTinhTrang(string TinhTrang)
        {
            return _CuonSachDAO.GetMaCuonSachVoiTinhTrang(TinhTrang);
        }
        public List<int> GetListMaCuonSachMuonBoiDocGia(int MaDocGia)
        {
            List<int> result = new List<int>();
            foreach (CUONSACH cs in GetCuonSachMuonBoiDocGia(MaDocGia))
            {
                if (!result.Contains(cs.MaCuonSach))
                    result.Add(cs.MaCuonSach);
            }
            return result;
        }
        public int GetSoNgayMuon(int MaCuonSach)
        {
            DateTime ngayMuon = GetNgayMuonCuonSach(MaCuonSach);
            if (ngayMuon == null)
                return 0;
            TimeSpan tgian = System.DateTime.Now - ngayMuon;
            return tgian.Days;
        }
        public int GetTienPhat(int MaCuonSach)
        {
            ThamSoBUS thamSoBus = new ThamSoBUS();
            int soNgayMuon = GetSoNgayMuon(MaCuonSach);
            int soNgayChoPhep = thamSoBus.GetGiaTriThamSo(thamSoBus.SoNgayMuonToiDa);
            if (soNgayMuon > soNgayChoPhep)
                return (soNgayMuon - soNgayChoPhep) * thamSoBus.GetGiaTriThamSo(thamSoBus.SoTienPhat);
            else return 0;
        }
        public bool SetTinhTrangCuonSach(int MaCuonSach, string TinhTrang)
        {
            return _CuonSachDAO.SetTinhTrangCuonSach(MaCuonSach, TinhTrang);
        }
        public DateTime GetNgayMuonCuonSach(int MaCuonSach)
        {
            return _CuonSachDAO.GetNgayMuonCuonSach(MaCuonSach);
        }
        public CUONSACH GetCuonSachByKey(int MaCuonSach)
        {
            return CuonSachDAO.GetCuonSachByKey(MaCuonSach);
        } 
        public List<CUONSACH> GetListCuonSach()
        {
            return _CuonSachDAO.GetListCuonSach();
        }
        public List<CUONSACH> GetCuonSachMuonBoiDocGia(int MaDocGia)
        {
            return _CuonSachDAO.GetCuonSachMuonByDocGia(MaDocGia);
        }
        public List<CUONSACH> GetListCuonSachVoiTinhTrang(string TinhTrang)
        {
            List<CUONSACH> result = new List<CUONSACH>();
            List<int> listMaCuonSach = GetMaCuonSachVoiTinhTrang(TinhTrang);
            foreach (int item in listMaCuonSach)
            {
                result.Add(GetCuonSachByKey(item));
            }
            return result;
        }
        public List<CUONSACH> GetListCuonSachMuonQuaHanByDocGia(int MaDocGia)
        {
            List<CUONSACH> result = new List<CUONSACH>();
            List<CUONSACH> cuonSach = GetCuonSachMuonBoiDocGia(MaDocGia);
            foreach (CUONSACH cs in cuonSach)
            {
                if (cs.TinhTrang == TT_MuonQuaHan && !result.Contains(cs))
                    result.Add(cs);
            }
            return result;
        }

        public string GetTenSach(int MaCuonSach)
        {
            CUONSACH cuonsach = GetCuonSachByKey(MaCuonSach);
            return new SachBUS().GetDauSachByMaSach(cuonsach.MaSach).TenSach;
        }

        public string GetTenTheLoai(int MaCuonSach)
        {
            CUONSACH cuonsach = GetCuonSachByKey(MaCuonSach);
            return new SachBUS().GetTheLoaiSach(cuonsach.MaSach).TenTheLoaiSach;
        }

        public THELOAISACH GetTheLoai(int MaCuonSach)
        {
            CUONSACH cuonsach = GetCuonSachByKey(MaCuonSach);
            return new TheLoaiSachBUS().GetTheLoaiByKey(new SachBUS().GetTheLoaiSach(cuonsach.MaSach).MaTheLoaiSach);
        }
        public List<string> GetListTacGia(int MaCuonSach)
        {
            CUONSACH cuonsach = GetCuonSachByKey(MaCuonSach);
            return new SachBUS().GetListTenTacGia(cuonsach.MaSach);
        }
    }
}
